import java.util.Scanner;

/**
 * Created With IntelliJ IDEA
 * Description:牛客网: 首页 > 试题广场 > 美国节日
 * <a href="https://www.nowcoder.com/questionTerminal/d95d98a2f96e49078cd7df84ba0c9d79">...</a>
 * User: DELL
 * Data: 2023-04-24
 * Time: 13:12
 */

/**
 * 题目要求输出的节日
 * 1月1日：元旦
 * 1月的第三个星期一：马丁·路德·金纪念日
 * 2月的第三个星期一：总统节
 * 5月的最后一个星期一：阵亡将士纪念日
 * 7月4日：美国国庆
 * 9月的第一个星期一：劳动节
 * 11月的第四个星期四：感恩节
 * 12月25日：圣诞节
 *
 * 解题思路：
 * 首先对于元旦，美国国庆，圣诞节直接输出月份即可
 * 其次对于马丁·路德·金纪念日，总统节，劳动节，感恩节,我们要做的主要有以下两步
 * 1.当月1日是星期几，　　2.根据当月1日是星期几推出符合要求的日期．
 * 这其中对于第一步,我们假定要求的是 y--m--d 是星期几,我们以公元前12月31日作为基准,
 * 即0000--12--31作为基准,求出 y--m--d 和基准日间隔的天数 % 7 即可,具体的公式如下:
 * w = (365*(y-1) + (y-1)/4 - (y-1)/100 + (y-1)/400 + 当前年过了多少天) % 7
 * 因为 365 % 7 == 1,因此化简后得:
 * w = (y-1 + (y-1)/4 - (y-1)/100 + (y-1)/400 + 当前年过了多少天) % 7
 * (其中当前年过了多少天我们利用数组记录每月的天数就很容易得到,还有就是这样子求出来后,星期
 * 日是由 0 来代表,我们可以将 最后 判断是否为 0 ,如果为 0 就改为 7即可.)
 * 对于第二步,假定我们要求的是第 m 月的第 n 个星期 w,且当月的1月1日为星期 x,基于此我们可
 * 以得到日期数 = 1 + (n-1)*7 + (w+7-x)%7
 * 最后对于5月的最后一个星期一：阵亡将士纪念日,我们可以先求出6月1日是星期几,同时将6月1日
 * 作为5月32日处理,假定6月1日是星期 w ,则
 * 阵亡将士纪念日的日数 = 32 - w==1 ? 7 :w-1
 *
 * 特别提醒,该解法答案全部正确,但是牛客网提示算法时间复杂度高,不能通过,其实这个解法不存在时间复杂度高的
 * 情况,单纯的就是牛客网设计的测试用例太多了,同时Java相较于C++慢,因此就超时,不用管它,同时我也看了看下面
 * 的题解,没有一个Java能跑出来,均是时间复杂度高,跑出来的都是C++,解法都一样,因此不用过于纠结.
 */
public class Main {
    private static final int[] DAYS = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};

    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        while (scanner.hasNext()) {
            int year = scanner.nextInt();
            int temp = 0;
            //1月1日：元旦
            System.out.printf("%d-01-01\n",year);
            //1月的第三个星期一：马丁·路德·金纪念日
            temp = getWeek(year,1,1);
            System.out.printf("%d-01-%02d\n",year,1 + (3-1)*7 + (1+7-temp)%7);
            //2月的第三个星期一：总统节
            temp = getWeek(year,2,1);
            System.out.printf("%d-02-%02d\n",year,1 + (3-1)*7 + (1+7-temp)%7);
            //5月的最后一个星期一：阵亡将士纪念日
            temp = getWeek(year,6,1);
            System.out.printf("%d-05-%02d\n",year,32 - (temp==1 ? 7 :temp-1));
            //7月4日：美国国庆
            System.out.printf("%d-07-04\n",year);
            //9月的第一个星期一：劳动节
            temp = getWeek(year,9,1);
            System.out.printf("%d-09-%02d\n",year,1 + (1+7-temp)%7);
            //11月的第四个星期四：感恩节
            temp = getWeek(year,11,1);
            System.out.printf("%d-11-%02d\n",year,1 + (4-1)*7 + (4+7-temp)%7);
            //12月25日：圣诞节
            System.out.printf("%d-12-25\n",year);
            //题目要求每组之间间隔一个换行
            System.out.println();
        }
    }

    /**
     * 判断是否为闰年
     * @param year
     * @return
     */
    private static boolean isLeapYear(int year) {
        return year % 400 == 0 || (year % 4 == 0 && year % 100 != 0);
    }

    /**
     * (返回 year--month--day 与 0000--12--31相差的天数) % 7 的取值
     * @param year
     * @param month
     * @param day
     * @return
     */
    private static int diff (int year, int month, int day) {
        //先求出当前年过了多少天
        int n = day;
        for (int i = 0; i < month-1; i++) {
            n += DAYS[i];
        }
        if (isLeapYear(year) && month >= 3) {
            n += 1;
        }
        //加上先前年过了多少天并模7
        return (year-1 + (year-1)/4 - (year-1)/100 + (year-1)/400 + n) % 7;
    }

    /**
     * 得到当前年月日是星期几
     * @param year
     * @param month
     * @param day
     * @return
     */
    private static int getWeek (int year, int month, int day) {
        int n = diff(year,month,day);
        return n == 0 ? 7 : n;
    }
}
